From 6fde8ec781325f1ee4dedbdd8ad04d89dedabd76 Mon Sep 17 00:00:00 2001 From: Paul Donald Date: Mon, 4 Dec 2023 17:34:40 +0100 Subject: [PATCH] Merge pull request #6352 from nevumx/add-wireguard-peer-addresses-config luci-proto-wireguard: adding an Addresses option to the wireguard peer config generator (cherry picked from commit 9d746c75f4023bf3c4bcfe77eaa394fbf0188d95) --- .../resources/protocol/wireguard.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js b/protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js index 0f13c9e9ee..387ada9003 100644 --- a/protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js +++ b/protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js @@ -686,7 +686,7 @@ return network.registerProtocol('wireguard', { o.modalonly = true; - o.createPeerConfig = function(section_id, endpoint, ips) { + o.createPeerConfig = function(section_id, endpoint, ips, eips) { var pub = s.formvalue(s.section, 'public_key'), port = s.formvalue(s.section, 'listen_port') || '51820', prv = this.section.formvalue(section_id, 'private_key'), @@ -702,6 +702,7 @@ return network.registerProtocol('wireguard', { return [ '[Interface]', 'PrivateKey = ' + prv, + eips && eips.length ? 'Address = ' + eips.join(', ') : '# Address not defined', eport ? 'ListenPort = ' + eport : '# ListenPort not defined', '', '[Peer]', @@ -717,7 +718,8 @@ return network.registerProtocol('wireguard', { var mapNode = ss.getActiveModalMap(), headNode = mapNode.parentNode.querySelector('h4'), configGenerator = this.createPeerConfig.bind(this, section_id), - parent = this.map; + parent = this.map, + eips = this.section.formvalue(section_id, 'allowed_ips'); return Promise.all([ network.getWANNetworks(), @@ -748,7 +750,7 @@ return network.registerProtocol('wireguard', { var qrm, qrs, qro; - qrm = new form.JSONMap({ config: { endpoint: hostnames[0], allowed_ips: ips } }, null, _('The generated configuration can be imported into a WireGuard client application to set up a connection towards this device.')); + qrm = new form.JSONMap({ config: { endpoint: hostnames[0], allowed_ips: ips, addresses: eips } }, null, _('The generated configuration can be imported into a WireGuard client application to set up a connection towards this device.')); qrm.parent = parent; qrs = qrm.section(form.NamedSection, 'config'); @@ -758,9 +760,10 @@ return network.registerProtocol('wireguard', { conf = this.map.findElement('.client-config'), endpoint = this.section.getUIElement(section_id, 'endpoint'), ips = this.section.getUIElement(section_id, 'allowed_ips'); + eips = this.section.getUIElement(section_id, 'addresses'); if (this.isValid(section_id)) { - conf.firstChild.data = configGenerator(endpoint.getValue(), ips.getValue()); + conf.firstChild.data = configGenerator(endpoint.getValue(), ips.getValue(), eips.getValue()); code.style.opacity = '.5'; invokeQREncode(conf.firstChild.data, code); @@ -778,9 +781,15 @@ return network.registerProtocol('wireguard', { ips.forEach(function(ip) { qro.value(ip) }); qro.onchange = handleConfigChange; + qro = qrs.option(form.DynamicList, 'addresses', _('Addresses'), _('IP addresses for the peer to use inside the tunnel. Some clients require this setting.')); + qro.datatype = 'ipaddr'; + qro.default = eips; + eips.forEach(function(eip) { qro.value(eip) }); + qro.onchange = handleConfigChange; + qro = qrs.option(form.DummyValue, 'output'); qro.renderWidget = function() { - var peer_config = configGenerator(hostnames[0], ips); + var peer_config = configGenerator(hostnames[0], ips, eips); var node = E('div', { 'style': 'display:flex;flex-wrap:wrap;align-items:center;gap:.5em;width:100%' -- 2.30.2